// 节流

// 如果你持续触发事件，每隔一段时间，只执行一次事件。
// 两种主流的实现方式，一种是使用时间戳，一种是设置定时器

// 使用时间戳
// 让我们来看第一种方法：使用时间戳，当触发事件的时候，我们取出当前的时间戳，然后减去之前的时间戳(最一开始值设为 0 )，如果大于设置的时间周期，就执行函数，然后更新时间戳为当前的时间戳，如果小于，就不执行。
function throttle(func, wait) {
  var context, args;
  var previous = 0;

  return function () {
    var now = +new Date();
    context = this;
    args = arguments;
    if (now - previous > wait) {
      func.apply(context, args);
      previous = now;
    }
  };
}

// 使用定时器
// 设置一个定时器，判断定时器是否存在，存在就执行函数，n秒后清空定时器
function throttle(func, wait) {
  var context, args, timeout;

  return function () {
    context = this;
    args = arguments;

    if (!timeout) {
      timeout = setTimeout(function () {
        timeout = null;
        func.apply(context, args);
      }, wait);
    }
  };
}

// 疑问
// clearTimeout(timeout)和timeout = null有什么区别呢?
// 设置定时器，清空定时器,打印timeout，是一个定时器的id

let timeout = setTimeout(function () {
  console.log("1111");
}, 1000);
clearTimeout(timeout);
console.log("timeout", timeout);
